############################################################################################
import os

print('\n第27部分')
'''
bug 异常

python中一切都是对象，异常也可以采用对象的方式处理

1、索引异常  迭代时超出范围
2、语法异常  中英文跟问题导致
3、类型异常  不同类型进行计算
4、零异常   0作为除数
5、键异常   字典不存在的时候
6、读取文件的   文件路径不存在的异常
7、名称异常
'''

# 捕获异常
try:
    print(1/0)
except Exception as e:
    print(e)  # division by zero

try:
    list1 = [1,2,3,4,5]
    print(list1[8])
except Exception as e:
    print(e)  # list index out of range

try:
    print(1)
except TypeError as e:
    print(e)  # 类型异常
except ZeroDivisionError as e:
    print(e)  # 零异常
except BaseException as e:
    print(e)  # 其他异常



try:
    print('可能发生异常的代码')
except Exception as e:
    print('捕获的异常信息：', e)  # 捕获异常信息
else:
    print('没有异常信息，执行的代码')
finally:
    print('无论如何最后都执行的代码')


############################################################################################
print('\n第28部分')
'''
文件
应用程序 是把数据写入数据库中，数据库也是基于文件的形式存储的

文件相关操作
文件 有两种类型
一种是文本类型 以字符来储存 py txt html
一种是二进制类型 以字节来存储 音频 视频 图片
'''

# f = open('test.txt', 'w')  # 打开文件
# f.close()  # 关闭文件

'''
目录 文件夹

目录和文件夹的区别
1、目录是用来储存文件和目录的集合
2、文件是用来储存数据的
'''

'''
1、打开文件
2、读取/写入文件
3、关闭文件

字符的编码 utf-8

r   只读
w   写入，如果文件不存在就新建，存在就覆盖
a   文件末尾追加

rb  以 读的二进制的方式打开文件
wb  以 写的二进制的方式打开文件
'''
f = open('test.txt', 'w', encoding='utf-8')  # 打开文件,[w]是写入
f.write('第一行内容\n第二行内容\n第三行内容\n第四行内容\n第五行内容')  # 写入文件
f.close()  # 关闭文件

'''
with方法，上下文管理器，会自动关闭文件,
可以省略close()方法
'''
with open('test.txt', 'r', encoding='utf-8') as f:
    txt = f.read()
    print(txt)
    print()
with open('test.txt', 'r', encoding='utf-8') as f:
    # txt2 = f.readline()  # 读取第一行内容
    txt2 = f.readlines()  # 读取多行内容，可以用for循环遍历
    for i in txt2:
        print(i)


############################################################################################
print('\n第29部分')
'''
os模块
'''
file_path = r'test.txt'
print(os.path.exists(file_path))  # 检查file_path文件【是否存在】
print(os.path.isdir(file_path))  # 检查file_path是不是【文件夹】
print(os.path.isfile(file_path))  # 检查file_path是不是【文件】
print(os.path.abspath(file_path))  # 获取file_path的【绝对路径】
print(os.path.basename(file_path))  # 获取【文件名】

path1 = os.getcwd()
print(path1)  # 获取当前目录
print(os.listdir(path1))  # 获取path1【目录下的所有文件名】

path2 = r'D:\code_test\pythonProject1\dirNone'
if not os.path.exists(path1):  # 如果文件夹不存在
    os.mkdir(path2)  # 创建path2文件夹

# 遍历path3目录下的所有文件和目录
path3 = os.getcwd()
list_files = os.walk(path3, topdown=False)
#   根目录 文件夹  文件
for root, dirs, files in list_files:
    # for name in dirs:  # 遍历所有子文件夹
    #     print(os.path.join(root, name))
    for name in files:  # 遍历所有文件
        print(os.path.join(root, name))


class Node(object):
    def __init__(self, value):
        self.value = value
        self.lnode = None
        self.rnode = None


class Tree(object):

    def __init__(self, newNode):
        self.node = newNode

    def add(self, node):
        if self.node is None:
            self.node = node
            return
        node_list = [self.root]
        while node_list:
            current = node_list[0]
            if current.lnode is None:
                current.lnode = node
                return
            else:
                node_list.append(current.lnode)
            if current.rnode is None:
                current.rnode = node
                return
            else:
                node_list.append(current.rnode)
